import { router,addRoutes } from "~/router"
import { getToken } from "~/composables/auth"
import { toast,showFullLoading,hideFullLoading } from '~/composables/util'
import store from "./store"

//全局前置守卫

//优化标签导航响应速度
let hasGetInfo = false

router.beforeEach(async(to, from,next) => { //to:即将到达的页面   from:我们从哪个页面来   都是路径   要使用await必须加async
  //显示Loading
  showFullLoading()

  const token = getToken()

  //没有登陆，强制跳转回登录页
  if(!token && to.path !="/login" ){
    toast("请先登录","error")
    return next({path:"/login"})
  }

  //防止重复登陆
  if(token && to.path =="/login" ){
    toast("请勿重复登录","error")
    return next({path:from.path ? from.path : "/"})//从哪里来的路径from.path    ？用来判断有无来的地址，否则回到首页
  }

  //如果用户登录，自动获取用户信息，并存储vuex中
  let hasNewRoutes = false

  if(token && !hasGetInfo){
    let { menus } = await store.dispatch("getinfo")  //异步操作需加await
    hasGetInfo = true
    //console.log(res);
    //在这里动态添加路由
    hasNewRoutes = addRoutes(menus)
  }

  //设置页面标题
  //console.log(to.meta.title);
  let title = (to.meta.title ? to.meta.title : "" ) + " - 商城后台" //let赋值
  document.title = title

  hasNewRoutes ? next(to.fullPath) : next() //放行，可正常访问页面 (手动添加路由-配合动态路由使用)
})

//全局后置守卫
router.afterEach((to, from) => hideFullLoading())
